package com.mjf.scala.chapter07

import scala.collection.mutable
import scala.collection.mutable.ArrayBuffer

/**
 * 可变数组：在执行添加或删除操作的时候，不会创建新的数组对象，直接在原数组上进行操作
 */
object Scala02_TestArrayBuffer {
  def main(args: Array[String]): Unit = {

    // 创建可变数组
    //    val arr: ArrayBuffer[Int] = new ArrayBuffer[Int]()  // 通过构造器
    val arr: ArrayBuffer[Int] = ArrayBuffer(1, 2, 3) // 通过apply方法

    // 访问数组中的元素
    //    println(arr(1))

    // 对数组中的元素修改
    //    arr(1) = 20
    //    arr.update(1, 20)
    //    println(arr(1))

    // 向数组中添加元素   建议：在操作集合的时候，不可变用符号，可变用方法
    val newArr: arr.type = arr.+=(20)
    //    arr.append(20)
    //    arr.insert(1, 50)
    println(arr.mkString("--")) // 1--2--3--20
    println(newArr.mkString("--")) // 1--2--3--20
    println(arr == newArr) // true

    // 注意：并不是数组是可变的，在操作数组的时候就不能创建新的数组对象了。 也可以调用相关方法，去创建新的对象
    val newArr2: ArrayBuffer[Int] = arr.+:(50)
    println(arr.mkString("--"))
    println(newArr2.mkString("--"))

    // 删除数组中的元素
    //    val num: Int = arr.remove(1)  // 删除索引为1的元素
    //    println(num)
    arr.remove(1, 2) // 删除索引从1的元素，共2个
    println(arr.mkString("--"))


    // 可变数组转换为不可变数组
    val array: Array[Int] = arr.toArray

    // 不可变数组转换为可变数组
    val buffer: mutable.Buffer[Int] = array.toBuffer

  }
}
